#ifndef FILETRANSFERSERVERDIALOG_H
#define FILETRANSFERSERVERDIALOG_H

#include <QDialog>
#include<QTcpServer>
#include<QFile>
#include<QtNetwork>
#include<QDateTime>
#include<QMessageBox>
#include<QDebug>
#include<QTcpSocket>
#include<QPainter>

//系统托盘头文件
#include <QSystemTrayIcon>
#include <QAction>
#include <QMenu>



QT_BEGIN_NAMESPACE
namespace Ui {
class FileTransferServerDialog;
}
QT_END_NAMESPACE

class FileTransferServerDialog : public QDialog
{
    Q_OBJECT

public:
    FileTransferServerDialog(QWidget *parent = nullptr);
    ~FileTransferServerDialog();

private:
    Ui::FileTransferServerDialog *ui;

public:
    QTcpServer *tcpServer;
    QTcpSocket *tcp_textSocket;//用于双方聊天信息传输
    QTcpSocket *tcp_fileSocket;//用于文件传输

    qint64 fileTotalBytes;//文件大小
    qint64 fileBytesReceived;//已经收文件大小
    qint64 fileNameLength;//文件名长度(按照字节计算)
    QString fileName;//接收的文件名
    QFile *localFile;//本地文件对象指针(用来保存接收文件)
    QByteArray buffer;//接收数据缓冲区(存储文件数据块)


    //获取本地IP地址、重绘事件处理
    QString getLocalIpAddressFunc();
    //设置窗口背景，重绘窗口背景
    void paintEvent(QPaintEvent *ev);

    //系统托盘
    QSystemTrayIcon *mySystemTrays;//托盘对象指针
    QMenu *pContextMenu;//表示托盘的菜单
    QAction *qMiniAction;//服务器最小化
    QAction *qRestoreAction;//服务器还原
    QAction *qExitAction;//退出系统



protected:
    //事件处理
    void closeEvent(QCloseEvent *event);//窗口关闭事件处理(停止监听并释放资源)

private slots:
    void on_pushButton_start_clicked();
    void on_pushButton_stop_clicked();
    void on_pushButton_exit_clicked();
    void on_pushButton_clear_clicked();
    void on_pushButton_send_clicked();

private slots:
    //TCP服务器相关槽函数
    void onNewConnectionFunc();//处理新连接请求(当有客户端连接时触发)

    //文本通道槽函数
    void onTextClientDisconnectedFunc();//文本socket断开连接处理
    void onTextSocketReadyReadFunc();//读取客户端发送的文本数据

    //文件通道槽函数
    void onFileClientConnectedFunc();//文件socket连接成功处理
    void onFileClientDisconnectedFunc();//文件socket断开连接处理

    //业务逻辑槽函数
    void updateServerProgressFunc();//更新文件接收进度条百分比
    void displayErrorInfoFunc(QAbstractSocket::SocketError socketError);//显示socket错误信息


    //系统托盘函数
    void mySystemTrayFunc();

};


#endif // FILETRANSFERSERVERDIALOG_H
